package cn.tedu;

public class Day18TestTwo {
   public static void main(String[] args) {
        My1Runnable t=new  My1Runnable();
        Thread x=new Thread(t);
        Thread x1=new Thread(t);
        Thread x2=new Thread(t);
        Thread x3=new Thread(t,"晨");
        x.start();
        x1.start();
        x2.start();
        x3.start();
    }
}
class My1Runnable implements Runnable{
    int a=100;
    //Object o=new Object();//锁对象可以任意。
    @Override
    //synchronized public void run(){}把方法加锁,相当于同一时间只能有一个线程来访问方法 没人抢占
    public void run(){
        while (true){
            //在代码块上加锁---
            //锁的位置:合理位置就是从共享资源第一次操作开始,用完结束
            //锁对象--可以任意,但是,必须是同一个锁对象
            //synchronized(new Object()){不是同一个对象,因为new了多次
            //也可以写成synchronized(o){//是同一个对象
                 synchronized(this){//是同一个对象(本类的对象)
                try {
                    Thread.sleep(10);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                if(a>0){
                    System.out.println(Thread.currentThread().getName()+"        "+a);
                }else {
                    break;//写上break;不写会死循环 得点击红点结束进程
                }
            }
            a--;
        }
    }
}
